 /*******************************************************************************
  * Copyright (c) 2006, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM - Initial API and implementation
  *******************************************************************************/
 package org.eclipse.update.internal.jarprocessor;

 import java.io.File ;
 import java.util.List ;
 import java.util.Properties ;

 /**
  * @author aniefer@ca.ibm.com
  *
  */
 public abstract class CommandStep implements IProcessStep {
     protected String command = null;
     protected String extension = null;
     private Properties options = null;
     protected boolean verbose = false;
     
     public CommandStep(Properties options, String command, String extension, boolean verbose) {
         this.command = command;
         this.extension = extension;
         this.options = options;
         this.verbose = verbose;
     }

     protected static int execute(String [] cmd) {
         return execute(cmd, false);
     }
     
     protected static int execute(String [] cmd, boolean verbose) {
         Runtime runtime = Runtime.getRuntime();
         Process proc = null;
         try {
             proc = runtime.exec(cmd);
             StreamProcessor errorStreamProcessor = new StreamProcessor(proc.getErrorStream(), StreamProcessor.STDERR, verbose); //$NON-NLS-1$
 StreamProcessor outputStreamProcessor = new StreamProcessor(proc.getInputStream(), StreamProcessor.STDOUT, verbose); //$NON-NLS-1$
 errorStreamProcessor.start();
             outputStreamProcessor.start();
         } catch (Exception e) {
             if(verbose) {
                 System.out.println("Error executing command " + Utils.concat(cmd)); //$NON-NLS-1$
 e.printStackTrace();
             }
             return -1;
         }
         try {
             int result = proc.waitFor();
             return result;
         } catch (InterruptedException e) {
             if(verbose)
                 e.printStackTrace();
         }
         return -1;
     }
     
     public Properties getOptions() {
         if(options == null)
             options = new Properties ();
         return options;
     }
     
     public void adjustInf(File input, Properties inf, List containers) {
         //nothing
 }
 }

